package bancosys.tec.security.authorization;

import java.io.Serializable;

/**
 * Permissão de Autorizável.
 * 
 * @author evaristo.goes
 */
public class AuthorizablePermission extends AbstractPermission implements Serializable {

    /**
     * Construtor.
     * 
     * @param authorizable Nome do item autorizável
     */
    public AuthorizablePermission(String authorizable) {
        if (authorizable == null) {
            throw new NullPointerException("Autorizável deve ser diferente de null");
        }
        this.id = authorizable;
        this.type = AuthorizablePermission.class;
    }

    /**
     * Compara o nome de um autorizável com o dessa instância.
     * 
     * @param authorizable Nome de um autorizável
     * @return <code>true</code> se id igual ao nome passado como parâmetro, <code>false</code> caso contrário.
     */
    @Override
    protected boolean matchPermissionId(String authorizable) {
        if ("*".equals(id)) {
            return true;
        } else {
            return this.id.equalsIgnoreCase(authorizable);
        }
    }

    /**
     * Devolve a representação string dessa entidade.
     * 
     * @return a representação string dessa entidade.
     */
    @Override
    public String toString() {
        return "AuthorizablePermission(authorizable: " + this.id + ")";
    }
}